#行的字符串长度

import unicodedata

_line_count = 70


#传入 command
#返回
#------------------------------command------------------------------
def log_title(title):
    if title is None:
        return '-'*_line_count
    strLen = calculate_display_length(title)
    a = (70-strLen)//2
    b = 70-strLen-a
    return f"""{('-'*a)}{title}{('-' * b)}"""


def calculate_display_length(s):
    return sum(2 if unicodedata.east_asian_width(c) in ['F','W'] else 1
               for c in s
               if not unicodedata.category(c).startswith('Cc'))

def subprocess_real_time_output(stdout,printLine=True,delete_unnecessary_lines=True):
    """
      实时输出子进程的stdout流。

      该函数用于实时处理并输出子进程的stdout流，同时可以选择性地打印每一行输出。

      参数:
      - stdout: 子进程的stdout流，类型通常为文件对象。
      - printLine: 布尔值，指示是否应该实时打印stdout中的每一行，默认为True。

      返回:
      - 返回一个字符串，包含子进程stdout流中的所有输出。
      """
    lines = []
    for line in iter(stdout.readline, ''):
        lines.append(line)
        if printLine:print(line , end='');
        # strIndex = line.find('\033')
        # if strIndex != -1:
            # print("033")
            # print(line[strIndex:len(line)])

    #删除多余的行,如maven中的 Progress (1): 5.5/102 kB
    if delete_unnecessary_lines: download_logs_handle(lines);
    return ''.join(lines)



def download_logs_handle(lines):
    count= len(lines)
    i = 0
    while i < count-3:
        #删除多余的换行符
        line = lines[i].replace("\r", "")
        # 如果数组中字符串存在Download开头的, 而下面两行都是 Progress开头的, 则删除第二行
        if line.startswith('Download'):
            if lines[i+1].startswith('Progress') and lines[i+2].startswith('Progress'):
                del lines[i+1]
                count -= 1
                continue
        i += 1

if __name__ == '__main__':
    log_file_path = r'Z:\\aiwork\\linux\\1.log'
    with open(log_file_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        download_logs_handle(lines)
        print(''.join(lines))
